read "init_arbre.mpl";
read "fasteval.mpl";

#puis2:=proc(n)
#	local tmp,i;
#	tmp:=n;
#	i:=0;
#	while tmp > 1 do
#		tmp:=tmp/2:
#		i:=i+1;
#	od;
#	return i;
#end;
# 
# REMPLACE PAR UN APPEL AU LOG EN BASE 2


fast_interpoly := proc(A,B)
	local Arbre,n,list_d, list_c, A_der, P, R;
	n:=nops(A);
	P:=mul(x-A[i], i = 1..n);
	A_der:=diff(P,x);
	Arbre:=init_arbre2(A);
	list_d:=fasteval2(A_der, A, Arbre);
	list_c:=seq(B[i]/list_d[i], i=1..n);
	#list_m_c := seq(x - list_c[i], i=1..n);
	R:=fracsum(A,[list_c],n);
	return R*P;
end;
	
